1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.common.annotations.GwtCompatible;
20
21 import java.io.Serializable;
22 import java.util.Collection;
23 import java.util.EnumSet;
24
25
26
27
28
29
30
31 @GwtCompatible(serializable = true, emulated = true)
32 @SuppressWarnings("serial")
33 final class ImmutableEnumSet<E extends Enum<E>> extends ImmutableSet<E> {
34 static <E extends Enum<E>> ImmutableSet<E> asImmutable(EnumSet<E> set) {
35 switch (set.size()) {
36 case 0:
37 return ImmutableSet.of();
38 case 1:
39 return ImmutableSet.of(Iterables.getOnlyElement(set));
40 default:
41 return new ImmutableEnumSet<E>(set);
42 }
43 }
44
45
46
47
48
49
50
51
52
53 private final transient EnumSet<E> delegate;
54
55 private ImmutableEnumSet(EnumSet<E> delegate) {
56 this.delegate = delegate;
57 }
58
59 @Override boolean isPartialView() {
60 return false;
61 }
62
63 @Override public UnmodifiableIterator<E> iterator() {
64 return Iterators.unmodifiableIterator(delegate.iterator());
65 }
66
67 @Override
68 public int size() {
69 return delegate.size();
70 }
71
72 @Override public boolean contains(Object object) {
73 return delegate.contains(object);
74 }
75
76 @Override public boolean containsAll(Collection<?> collection) {
77 return delegate.containsAll(collection);
78 }
79
80 @Override public boolean isEmpty() {
81 return delegate.isEmpty();
82 }
83
84 @Override public boolean equals(Object object) {
85 return object == this || delegate.equals(object);
86 }
87
88 private transient int hashCode;
89
90 @Override public int hashCode() {
91 int result = hashCode;
92 return (result == 0) ? hashCode = delegate.hashCode() : result;
93 }
94
95 @Override public String toString() {
96 return delegate.toString();
97 }
98
99
100 @Override Object writeReplace() {
101 return new EnumSerializedForm<E>(delegate);
102 }
103
104
105
106
107 private static class EnumSerializedForm<E extends Enum<E>>
108 implements Serializable {
109 final EnumSet<E> delegate;
110 EnumSerializedForm(EnumSet<E> delegate) {
111 this.delegate = delegate;
112 }
113 Object readResolve() {
114
115 return new ImmutableEnumSet<E>(delegate.clone());
116 }
117 private static final long serialVersionUID = 0;
118 }
119 }